'''
* This is the projet for Brtc LlmOps Platform
* @Author Leon-liao <liaosiliang@alltman.com>
* @Description //TODO 
* @File: 6_study_use_runable_passthrouh.py
* @Time: 2025/7/13
* @All Rights Reserve By Brtc
'''
import dotenv
from langchain_community.chat_models import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough


def retriver_from_anywhere(query:str):
    print(f"开始检索问题{query}的相关文档")
    return "我叫博小睿，今年18岁，存款100块"
dotenv.load_dotenv()
# 1、 构建一个prompt
prompt = ChatPromptTemplate.from_template(""" 
 请根据用户的问题来回答，可以参考上下文进行问题的回答，
 <context>
 {context}
 </context>
 用户的问题是:
 {query}
 """)
# llm 的构建
llm = ChatOpenAI(model="gpt-3.5-turbo-16k")
# 输出解析器
paraser = StrOutputParser()
""" 
chain = RunnableParallel({
    "context": lambda x:retriver_from_anywhere(x["query"]),
    "query":itemgetter("query")}
)|prompt|llm|paraser
 """
# 接收 用户传递的{"query":"你好， 我是谁？"}，通过 RunnablePassthrough接收，并通过retriver_from_anywhere，
# 来填充另一个参数context。
chain_new = (RunnablePassthrough.assign(context= lambda x:retriver_from_anywhere(x["query"]))
             |prompt|llm|paraser)

content = chain_new.invoke({"query":"你好， 我是谁？"})
print(content)